package com.pj.controller;

import com.pj.service.RagFlowChatAssistantService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author zzy
 * @date 2025/6/21 13:47
 * @description : 聊天助手管理
 */
@RestController
@RequestMapping("/ragFlow/chatAssistant")
public class RagFlowChatAssistantController {

    @Autowired
    private RagFlowChatAssistantService ragFlowChatAssistantService;

    /**
     * 添加聊天助手
     * @return ChatAssistantListResponse
     */
    @PostMapping("/add")
    public Map<String, Object> getChatAssistant(String name) {

        String ragFlowApi = "/api/v1/chats";
        // 构造 llm 参数
//        TODO 创建聊天助手 ，中模型名称，参数等内容是写死了的
        Map<String, Object> llmConfig = new HashMap<>();
        llmConfig.put("model_name", "deepseek-r1:1.5b");
        llmConfig.put("temperature", 0.1D);
        llmConfig.put("top_p", 0.3D);
        llmConfig.put("presence_penalty", 0.4D);
        llmConfig.put("frequency_penalty", 0.7D);

        // 构造 prompt 里面的 variables 参数
        Map<String, Object> promptVariable = new HashMap<>();
        promptVariable.put("key", "knowledge");
        promptVariable.put("optional", true);

        List<Map<String, Object>> promptVariables = new ArrayList<>();
        promptVariables.add(promptVariable);

        // 构造 prompt 参数
        Map<String, Object> promptConfig = new HashMap<>();
        promptConfig.put("similarity_threshold", 0.2D);
        promptConfig.put("keywords_similarity_weight", 0.7D);
        promptConfig.put("top_n", 6);
        promptConfig.put("variables", promptVariables);
        promptConfig.put("empty_response", "网络波动问题");
        promptConfig.put("prompt", "你是一个智能助手，请总结知识库的内容来回答问题，请列举知识库中的数据详细回答。当所有知识库内容都与问题无关时，" +
                "你的回答必须包括“知识库中未找到您要的答案！”这句话。回答需要考虑聊天历史。\n" +
                "        以下是知识库：\n" +
                "        {knowledge}\n" +
                "        以上是知识库。");
        promptConfig.put("rerank_model", "");
        promptConfig.put("opener","你好，有什么需要我帮助你的？");

        // 构造 dataset_ids 参数
        List<String> dataSetIDs = new ArrayList<>();
        dataSetIDs.add("04567a324d8211f0925f5a65e9fb22c9");

        Map<String, Object> requestBody = new HashMap<>();
        requestBody.put("name", name);
        requestBody.put("dataset_ids",dataSetIDs);
        requestBody.put("llm", llmConfig); // 指定谁可以访问要创建的数据集"me"：（默认）只有您可以管理数据集。   "team"：所有团队成员都可以管理数据集。
        requestBody.put("prompt", promptConfig); // 分片方法

        return ragFlowChatAssistantService.addChatAssistant(ragFlowApi,requestBody);
    }

    /**
     * 列出聊天助手
     */
    @RequestMapping("/list")
    public List<Map<String, Object>> getChatAssistantList() {
        String ragFlowApi = "/api/v1/chats";
        Map<String, Object> requestBody = new HashMap<>();
        return ragFlowChatAssistantService.listChatAssistant(ragFlowApi,requestBody);
    }


}
